//
//  PublicUtil.h
//  test
//
//  Created by 袁应荣 on 2017/3/11.
//  Copyright © 2017年 袁应荣. All rights reserved.
//

////////////  常用的功能集合   ////////////////

#import <Foundation/Foundation.h>

@interface PublicUtil : NSObject

/**
 *  数字格式化用 “，”分割
 */
+ (NSString *)formatFloatNum:(double)num;

/**
 *  得到用户手机IP
 *
 *  @return 手机IP地址
 */
+ (NSString *)getIPAddress;

#pragma mark -- 字典转JSON
+ (NSString*)dictionaryToJson:(NSDictionary *)dic;

#pragma mark -- 字符串尺寸
/**传入字符串、字体大小、宽度 返回Size*/
+ (CGSize)SizeForString:(NSString *)str WithFont:(UIFont *)font AndWidth:(NSInteger)width;

//  NSAttributedString 专用
+ (CGFloat)heightForLabelWithNSAttributedString:(NSAttributedString *)attrStr labelWidth:(CGFloat)labelWidth;

// 计算 text 对应的高度
+ (CGFloat)heightForCellWithText:(NSString *)contentText fontSize:(UIFont *)labelFont labelWidth:(CGFloat)labelWidth;

/**
 *  输入NSString类型 调整label的行间距并返回一个NSAttributedString
 *
 *  @param str   文字
 *  @param space 行间距
 *
 *  @return 返回一个 NSAttributedString  设置label的NSAttributedString为该返回值，并sizeTofit该label
 */
+ (NSAttributedString *)getMutableStringWithStr:(NSString *)str withLineSpace:(NSInteger )space;

#pragma mark -- 时间相关
/**根据日期返回NSDate对象(日期格式: 2014-01-02 03:22:10)*/
+ (NSDate *)getNSDateFromString:(NSString *)dateStr;

/** 根据日期返回NSDate对象(日期格式: 2014-01-02)*/
+ (NSDate *)getNSDateFromSimpleDateString:(NSString *)dateStr;

/** 根据NSDate返回String对象(格式: 2014.01.02)*/
+ (NSString *)getStringFromPointDate:(NSDate *)destDate;

/** 根据NSDate返回String对象(格式: 2014/01/02)*/
+ (NSString *)getStringFromNSDate:(NSDate *)destDate;

/** 根据日期表示返回中文的（周二 12月6日）(日期格式: 2014-01-02 03:22:10)*/
+ (NSString *)getChineseWeekdayWithDateString:(NSString *)dateStr;

/** 根据日期返回时间表示 19:30 (日期格式: 2014-01-02 03:22:10)*/
+ (NSString *)getTimeStrWithString:(NSString *)dateStr;

/** 根据日期返回时间表示,以标准形式定义 (日期格式: 2014-01-02 03:22:10)*/
+ (NSString *)getTimeStrWithString:(NSString *)dateStr FormatterStr:(NSString *)fStr;
#pragma mark -- 获取某个月的天数
+ (NSInteger)getSumOfDaysInMonth:(NSString *)year month:(NSString *)month;

#pragma mark - 比较两个日期
+ (int)compareOneDate:(NSDate *)oneDate withAnotherDate:(NSDate *)anotherDate;

#pragma mark - 计算两个日期相差的年
+ (NSInteger)calculateFromDate:(NSDate *)fromDate withToDate:(NSDate *)toDate;
// (日期格式: 2014-01-02 03:22:10)
+ (NSInteger)calculateFromDateStr:(NSString *)fromDateStr withToDateStr:(NSString *)toDateStr;
+ (NSInteger)calculateDayFromDateStr:(NSString *)fromDateStr withToDateStr:(NSString *)toDateStr;

#pragma mark -  延时执行
+ (void)doSomething:(void (^)(void))functions
     afterDelayTime:(double)delayInSeconds;

+ (void)doSomethingLater:(void (^)(void))functions;


#pragma mark - 主线程执行
+ (void)doSomethingOnMainThread:(void (^)(void))functions;

+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;

#pragma mark 金币大小写 --> 封装的方法
+ (NSString *)changetoBigMoney:(NSString *)numstr;

/// 判断字典为空
+ (BOOL)isBlankDictionary:(NSDictionary *)dict;
/// 判断数组为空
+ (BOOL)isBlankArr:(NSArray *)arr;
///  判断字符串是否为空
+ (BOOL)isBlankString:(NSString *)aStr;

/// 保持小数点后两位，不足补小数点或者0.
+ (NSString*)returnTwoDeciTwoDecimalFormatter:(NSString*)stringNumber;

/// 保持小数点后两位没有小数位的不添加
+ (NSString*)returnTwoDeciDecimalFormatter:(NSString*)stringNumber;


/**
 根据传入数字字符串和要保留的小数位数获取对应的字符串
 
 @param StrNum 传入的数字
 @param scale 保留的小数位
 @return 返回的字符串
 */
+ (NSString *)returnDecimalFormatterWithStrNum:(NSString *)StrNum scale:(short)scale;

/**
 block回调
 
 @param currentVersion 当前版本号
 @param storeVersion 商店版本号
 @param openUrl 跳转到商店的地址
 @param isUpdate 是否为最新版本
 */
typedef void(^UpdateBlock)(NSString *currentVersion,NSString *storeVersion, NSString *openUrl,BOOL isUpdate);

/**
 一行代码实现检测app是否为最新版本。appId，bundelId，随便传一个 或者都传nil 即可实现检测。
 @param appId    项目APPID，10位数字，有值默认为APPID检测，可传nil
 @param bundelId 项目bundelId，有值默认为bundelId检测，可传nil
 @param block    检测结果block回调
 */
+(void)yyr_updateWithAPPID:(NSString *)appId withBundleId:(NSString *)bundelId block:(UpdateBlock)block;

+ (NSString *)yyr_contentTypeForImageData:(NSData *)data;

@end
